package org.example.hansp.reflection.demo1;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Properties;

public class ReflectionDemo1 {
    /**/
    @Test
    public void test() {
        Cat cat = new Cat();
        cat.hi();
    }
    @Test
    public void test2() throws Exception {
        //1.使用properties类，读写配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src\\main\\java\\org\\example\\hansp\\reflection\\demo1\\re.properties"));
        String classfullpath = prop.getProperty("classfullpath").toString();
        String methodName = prop.getProperty("method").toString();
        System.out.println("classfullpath: " + classfullpath);
        System.out.println("method: " + methodName);

        //2.创建对象，传统的方法行不通 =》反射
        //new classfullpath();


        //3.使用反射机制解决
        //(1)加载类，返回Class类型对象clazz
        Class clazz = Class.forName(classfullpath);
        //(2)t通过clazz 得到加载的类 Cat 的对象实例
        Object o = clazz.newInstance();
        System.out.println("o的运行类型"+o.getClass());
        //（2）通过clazz得到加载的类的方法对象
        //即： 在反射中，可以把方法视作对象（万物皆对象）
        Method method = clazz.getMethod(methodName);
        //（4）通过method 调用方法： 即通过方法对象来实现调用方法
        method.invoke(o);

        /*通过*/
    }


}
